﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Uurrooster_opdracht
{
    public partial class FormVakken : Form
    {


        //===========================DECLARATIE VARIABELEN===================================
        DataClasses1DataContext DB;
        List<tblVak> LIJSTVAKKEN;
        
        
        public FormVakken()
        {
            InitializeComponent();
            DB = new DataClasses1DataContext();
            LIJSTVAKKEN = DB.tblVaks.ToList();        
        }

        private void FormVakken_Load(object sender, EventArgs e)
        {
            enableAllButtons();
            updateTotal();
            butFirst_Click_1(null, null);
        }


        //===========================HANDLERS VOOR ALLE BUTTONS============================================

        private void butFirst_Click_1(object sender, EventArgs e)
        {
            long EERSTE_ID = LIJSTVAKKEN.First().vakID;

            this.dipslayVak(EERSTE_ID);

            //de knoppen mogen terug aan, als ze afstonden!
            enableAllButtons();

        }



        private void butNext_Click_1(object sender, EventArgs e)
        {
            //algemene voorbereiding
            LIJSTVAKKEN = DB.tblVaks.ToList();

            //inlezen van de studentenID die momenteel in het tekstvenster staat
            String huidigeID = txtVakID.Text;

            //omzetten naar een long
            long huidigeVakID = Convert.ToInt64(huidigeID);

            //startwaarde om positie van huidige student in lijst te zoeken
            int index = -1;

            //index laten oplopen zolang de juiste student niet gevonden is
            //totdat einde lijst bereikt is
            do
            {
                index++; //opmerking : feitelijk starten we bij item nr 0
            }
            while ((LIJSTVAKKEN[index].vakID != huidigeVakID) &&
                   (index < LIJSTVAKKEN.Count()));

            //nu wordt overgeschakeld van de huidige student op de volgende student
            index++;

            //de loop wordt verlaten indien alle elementen uit de lijst zijn doorlopen
            //in dat geval = index gelijk aan Count()
            //in dat geval -> doe niets
            if ( index == LIJSTVAKKEN.Count() )
            {
                disableAllButtons();
                butFirst.Enabled = true;
                txtVak.Text = "GEEN NEXT!";
                txtVakID.Text = "GEEN NEXT!";
                return;
            }

            //de loop wordt ook verlaten in dat geval is de index gelijk aan de huidig af te beelden 
            //student
            if (index < LIJSTVAKKEN.Count())
            {
                this.dipslayVak(LIJSTVAKKEN[index].vakID);
            }

        }



        //verwijderen van een student
        private void butDelete_Click_1(object sender, EventArgs e)
        {
            //inlezen van de studentenID die momenteel in het tekstvenster staat
            String huidigeID = txtVakID.Text;

            //omzetten naar een long
            long huidigeVakID = Convert.ToInt64(huidigeID);

            //de te deleten student selecteren uit de database
            tblVak magweg = (from tblVak
                                 in DB.tblVaks
                                 where tblVak.vakID == huidigeVakID
                                 select tblVak).First();

            //doorvoeren wijzigingen
            DB.tblVaks.DeleteOnSubmit(magweg);
            DB.SubmitChanges();
            //updaten van het schermgebeuren
            butFirst_Click_1(null, null);

        }




        //wist de schermen, en maakt de ADD knop actief !
        private void butClear_Click(object sender, EventArgs e)
        {
            
            txtVak.Text = "";
            txtVakID.Text = "***";

            //knop add mag nu actief zijn !
            disableAllButtons();
            butAdd.Enabled = true;

        }




        //button ADD
        private void butAdd_Click_1(object sender, EventArgs e)
        {
            //de informatie in de tekstvelden moet kunnen omgezet worden naar een string
            //van lengte 20
            tblVak NIEUW = new tblVak();
            NIEUW.vakNaam = txtVak.Text;

            //submitten van de creatie van de nieuwe student
            DB.tblVaks.InsertOnSubmit(NIEUW);
            DB.SubmitChanges();

            //updaten van de scherminfo
            this.dipslayVak(NIEUW.vakID);
        }





        private void butEdit_Click_1(object sender, EventArgs e)
        {
            //inlezen van de studentenID die momenteel in het tekstveld staat
            String huidigeID = txtVakID.Text;

            //omzetten naar een long
            long huidigeVakID = Convert.ToInt64(huidigeID);

            //opzoeken van student met dit StudentenID
            tblVak gekozen = (from tblVak
                                  in DB.tblVaks
                                  where tblVak.vakID == huidigeVakID
                                  select tblVak).First();

            //de tekstvelden moet gereduceerd worden tot lengte 20 characters!
            //de info uit de tekstvelden naar een lengte brengen die zeker 20 characters is
            //en dit om mogelijke format-Out_of_Bounds Exceptions te voorkomen in de database!

            //de info uit de tekstvelden opslaan
            gekozen.vakNaam = txtVak.Text.PadRight(20);
            gekozen.vakNaam = gekozen.vakNaam.Substring(0, 20);

            //de aangepaste gegevens nu nog opslaan in de database
            DB.SubmitChanges();

            //updaten van scherminfo
            dipslayVak(gekozen.vakID);
        }







        //===========================ZELF GEMAAKTE HULP FUNCTIES==================================

        //zet alle knoppen actief
        private void enableAllButtons()
        {
            butFirst.Enabled = true;
            butNext.Enabled = true;
            butAdd.Enabled = false;  //uitzondering! kan alleen indien men eerst op new drukt
            butDelete.Enabled = true;
            butEdit.Enabled = true;
            butClear.Enabled = true;
        }



        //zet allen knoppen af
        private void disableAllButtons()
        {
            butFirst.Enabled = true;  //uitzondering: mag altijd aanblijven staan...
            butNext.Enabled = false;
            butAdd.Enabled = false;
            butDelete.Enabled = false;
            butEdit.Enabled = false;
            butClear.Enabled = false;
        }




        //zorg dat het totaal van de student wordt geupdate
        private void updateTotal()
        {
            //update van de lijsten
            LIJSTVAKKEN = DB.tblVaks.ToList();
            //update van het totaal
            lblTotaal.Text = "" + LIJSTVAKKEN.Count() + " items";
        }



        private void dipslayVak(long X)
        {
            //voor alle veiligheid ook het totaal updaten
            updateTotal();

            //opzoeken van student met dit StudentenID
            tblVak gekozen = (from tblVak
                                  in DB.tblVaks
                                  where tblVak.vakID == X
                                  select tblVak).First();

            //gegevens in de tekstvelden zetten
            txtVak.Text = gekozen.vakNaam;
            txtVakID.Text = gekozen.vakID + "";
        }


        

        
        

        

       

        






    }
}
